<?php

namespace practice\designPatterns;


/**
 * https://designpatternsphp.readthedocs.io/zh_CN/latest/Creational/SimpleFactory/README.html
 * https://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/factory_method.html
 * 工厂方法模式(Factory Method Pattern)
 * 模式定义
 * 工厂方法模式(Factory Method Pattern)又称为工厂模式，也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式，它属于类创建型模式。
 * 在工厂方法模式中，工厂父类负责定义创建产品对象的公共接口，而工厂子类则负责生成具体的产品对象，这样做的目的是将产品类的实例化操作延迟到工厂子类中完成，即通过工厂子类来确定究竟应该实例化哪一个具体产品类。
 *
*/
class CreationalPatternFactoryMethod
{
    public static function test()
    {
        return new ShapeFactory();
    }
}

class ShapeFactory
{
    public function getShare($type) : Shape
    {
        $type = ucfirst(strtolower($type));
        return match ($type) {
            'Circle' => new Circle(),
            'Rectangle' => new Rectangle(),
            'Square' => new Square(),
        };
    }
}
